package com.javapig.util;

import java.util.*;

public class DateUtils {

  /* 日期处理模块 (将日期加上某些天或减去天数)返回字符串
   * 将当前日期加减n天数。
   * 如传入字符型"-5" 意为将当前日期减去5天的日期
   * 如传入字符型"5"  意为将当前日期加上5天后的日期
   * 返回字串  例(1999-02-03)
   */
  public static final String dateAdd(String to)
  {
    int strTo;
    try {
      strTo = Integer.parseInt(to);
    }
    catch (Exception e) {
      System.out.println("日期标识转换出错! : \n:::" + to + "不能转为数字型");
      e.printStackTrace();
      strTo = 0;
    }
    Calendar strDate = Calendar.getInstance(); //java.util包
    strDate.add(strDate.DATE, strTo); //日期减 如果不够减会将月变动
    //生成 (年-月-日) 字符串
    String meStrDate = strDate.get(strDate.YEAR) + "-" +
        String.valueOf(strDate.get(strDate.MONTH) + 1) + "-" +
        strDate.get(strDate.DATE);
    return meStrDate;
  }

  //计算两个日期之间的天数
  //date1应大于data2
  public static final int getDays(Date date1,Date date2) {
    int days = 0;
    days = (int) ( (date1.getTime() - date2.getTime()) / (24 * 60 * 60 * 1000));
    return days;
  }

  //计算两个日期之间的间隔（单位毫秒）
  //date1应大于data2
  public static final int datediff(Date date1,Date date2) {
    int days = 0;
    days = (int) (date1.getTime() - date2.getTime());
    return days;
  }

  /* 获取系统当前时间
   * 声明成表态方法
   */
  public static final String getsystemdate(){
    java.util.Date currentTime = new java.util.Date();
    java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(
        "yyyy-MM-dd");
    String sDateTime = sdf.format(currentTime);
    return sDateTime;
  }


  public static final String getsystemdate(char type){
    java.util.Date currentTime = new java.util.Date();
    String sDateTime,
        formattype;
    java.text.SimpleDateFormat sdf;
    switch (type) {
      case 'd':
        formattype = "yyyy-MM-dd";
        break;
      case 's':
        formattype = "yyyy-MM-dd HH:mm:ss";
        break;
      case 'f':
        formattype = "yyyy-MM-dd HH:mm:ss.SSS";
        break;
      default:
        formattype = "yyyy-MM-dd";
    }
    sdf = new java.text.SimpleDateFormat(formattype);
    sDateTime = sdf.format(currentTime);
    return sDateTime;
  }

  /* 把时间格式化，去掉毫秒，清确到秒
   * 用rs.getObject("Date")从mssql中取出精确到秒的时间为参数
   * 声明成表态方法，可以用
   */
  public static final String getformatdate(Object objdate){
    //yyyy-MM-dd HH:mm:ss.SSS 精确到毫秒
    //yyyy-MM-dd HH:mm:ss 精确到秒
    java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(
        "yyyy-MM-dd HH:mm:ss");
    String sDateTime = sdf.format(objdate);
    return sDateTime;
  }

  /**
   * 把时间格式化
   * @param value
   * @return
   */
  public static final String getformatdate(Object objdate,String formattype){
    //yyyy-MM-dd HH:mm:ss.SSS 精确到毫秒
    //yyyy-MM-dd HH:mm:ss 精确到秒
    java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(formattype);
    String sDateTime = sdf.format(objdate);
    return sDateTime;
  }

  /**
   * 得到当前时间信息
   * @return String
   */
  public static final String getCurrentDateinfo(){
    Calendar calendar = Calendar.getInstance();
    int year,month,day,weekday;
    String val="";
    year = calendar.get(Calendar.YEAR);
    month = calendar.get(Calendar.MONTH)+1;
    day = calendar.get(Calendar.DATE);
    weekday = calendar.get(Calendar.DAY_OF_WEEK);
    switch (weekday) {
          case 1:
             val="星期天";
             break;
          case 2:
             val="星期一";
             break;
          case 3:
             val="星期二";
             break;
          case 4:
             val="星期三";
             break;
          case 5:
             val="星期四";
             break;
          case 6:
             val="星期五";
             break;
          default:
             val="星期六";
    }
    return year+"年"+month+"月"+day+"日 "+val;
  }
}
